package pe.edu.unmsm.fisi.sisconteg.domain.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.UniqueConstraint;

import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @author Carlos y Marlon
 */
@Entity
@Table(name = "tb_usuario", catalog = "bdsisconteg", uniqueConstraints = @UniqueConstraint(columnNames = "T_NICK_USUARIO"))
public class Usuario implements java.io.Serializable {

	private Integer idUsuario;
	private String nickUsuario;
	private String pwdUsuario;
	private String email;
	private int perfil;
	private Boolean valido;
	private Egresado egresado;

	public Usuario() {
	}

	public Usuario(Egresado egresado) {
		this.egresado = egresado;
	}
	
	public Usuario(String nickUsuario, String pwdUsuario, String email,
			int perfil) {
		this.nickUsuario = nickUsuario;
		this.pwdUsuario = pwdUsuario;
		this.email = email;
		this.perfil = perfil;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "C_ID_USUARIO", unique = true, nullable = false)
	public Integer getIdUsuario() {
		return this.idUsuario;
	}

	public void setIdUsuario(Integer idUsuario) {
		this.idUsuario = idUsuario;
	}

	@Column(name = "T_NICK_USUARIO", nullable = false, length = 100)
	public String getNickUsuario() {
		return this.nickUsuario;
	}

	public void setNickUsuario(String nickUsuario) {
		this.nickUsuario = nickUsuario;
	}

	@Column(name = "T_PWD_USUARIO", length = 150)
	public String getPwdUsuario() {
		return this.pwdUsuario;
	}

	public void setPwdUsuario(String pwdUsuario) {
		this.pwdUsuario = pwdUsuario;
	}

	@Column(name = "T_EMAIL_USUARIO", nullable = false, length = 150)
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Column(name = "N_PERFIL_USUARIO", nullable = false)
	public int getPerfil() {
		return this.perfil;
	}

	public void setPerfil(int iperfil) {
		this.perfil = iperfil;
	}

	@Column(name = "B_VALIDO")
	public Boolean getValido() {
		return this.valido;
	}

	public void setValido(Boolean valido) {
		this.valido = valido;
	}
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "N_ID_EGRESADO", nullable = true)
	public Egresado getEgresado() {
		return egresado;
	}

	public void setEgresado(Egresado egresado) {
		this.egresado = egresado;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (!(obj instanceof Usuario))
			return false;

		Usuario other = (Usuario) obj;
		if ((this.idUsuario == null && other.idUsuario != null)
				|| (this.idUsuario != null && !this.idUsuario
						.equals(other.idUsuario)))
			return false;

		return true;
	}
	
	@Override
	public int hashCode() {
		int hash = 9;
		hash = 53 * hash + (this.idUsuario != null ? this.idUsuario.hashCode() : 0);
		return hash;
	}
}
